home *** CD-ROM | disk | FTP | other *** search
- /* Startup-Module
- ** Copyright © 1995 by Sebastian Rittau
- **
- ** $VER: startup.m 1.10 (14.10.95)
- **
- **
- ** Required:
- **
- ** - Kickstart >= 37
- ** - utility.library >=37
- **
- **
- ** Vars:
- **
- ** - wbstart - TRUE or FALSE
- ** - parsed - Array for arguments passed in
- **
- **
- ** Procs:
- **
- ** - error:=ini(execbase,minversion,template,tags=NIL)
- ** Args:
- ** - minversion: lowest kickversion needed
- ** - template: template-string for ReadArgs()
- ** Tags:
- ** - STARTM_EXCLUDE: specify from where the program cannot be run (flags):
- ** - STARTM_CLISTART: from CLI
- ** - STARTM_WBSTART: from wb
- ** Errors:
- ** - ERROR_NOMEM: lack of memory
- ** - STARTM_FALSEKICK: kickstartversion to small
- ** - STARTM_WRONGARGS: error on ReadArgs()
- ** - STARTM_EXCLUDEERROR: the program was started from an excluded source
- **
- ** - end()
- */
-
- OPT MODULE
-
-
- MODULE 'exec/execbase',
- 'exec/libraries',
- 'exec/memory'
- MODULE 'dos/dosextens',
- 'dos/rdargs'
- MODULE 'utility',
- 'utility/tagitem'
- MODULE 'icon',
- 'workbench/workbench'
- MODULE 'tools/vars'
- MODULE 'own/error'
-
-
- ->** tags
- EXPORT ENUM STARTM_EXCLUDE=TAG_USER,
- STARTM_READICON
-
- ->** flags
- EXPORT SET STARTM_CLISTART,
- STARTM_WBSTART
-
- ->** errors
- EXPORT ENUM STARTM_FALSEKICK=TAG_USER,
- STARTM_WRONGARGS,
- STARTM_EXCLUDEERROR
-
-
- EXPORT OBJECT obj_startup
- wbstart
- parsed:PTR TO LONG
- PRIVATE
- args
- istemplate
-
- closeutil
- closeicon
- ENDOBJECT
-
- /**************************************************************************
- ** Constructor **
- **************************************************************************/
-
- EXPORT PROC ini(base:PTR TO execbase,minversion,template,tags=NIL) OF obj_startup
- DEF return=ERROR_NONE,
- proc:PTR TO process,
- starttypes,clistart
-
- self.wbstart:=FALSE
- self.parsed:=NIL
- self.args:=NIL
- self.istemplate:=FALSE
- self.closeutil:=FALSE
- self.closeicon:=FALSE
-
- ->** check version
- IF minversion<37 THEN minversion:=37
- IF base::lib.version<minversion
- WriteF('This program requires at least exec.library V\d!\n',minversion)
- return:=STARTM_FALSEKICK
- JUMP endini
- ENDIF
-
- IF utilitybase=NIL
- utilitybase:=OpenLibrary('utility.library',37)
- self.closeutil:=TRUE
- ENDIF
-
- IF iconbase=NIL
- iconbase:=OpenLibrary('icon.library',36)
- self.closeicon:=TRUE
- ENDIF
-
- starttypes:=GetTagData(STARTM_EXCLUDE,0,tags)
-
- proc:=base.thistask
- clistart:=proc.cli
- IF ((starttypes AND STARTM_CLISTART) AND clistart) OR ((starttypes AND STARTM_WBSTART) AND (clistart=NIL))
- return:=STARTM_EXCLUDEERROR
- JUMP endini
- ENDIF
-
- IF template
- IF StrCmp(template,'')=FALSE
- self.istemplate:=TRUE
- self.parsed:=AllocVec((countchar(template,',')+1)*SIZEOF LONG,MEMF_CLEAR)
- IF self.parsed=NIL
- return:=ERROR_NOMEM
- JUMP endini
- ENDIF
- ENDIF
- ENDIF
-
- ->** CLI-args
- IF clistart
- self.wbstart:=FALSE
- self.args:=ReadArgs(template,self.parsed,NIL)
- IF self.args=NIL
- return:=STARTM_WRONGARGS
- JUMP endini
- ENDIF
- ELSE
- self.wbstart:=TRUE
- IF GetTagData(STARTM_READICON,FALSE,tags)
- IF (return:=self.diskobject(template)) THEN JUMP endini
- ENDIF
- ENDIF
-
- endini:
- ENDPROC return
-
- /**************************************************************************
- ** Destructor **
- **************************************************************************/
-
- EXPORT PROC end() OF obj_startup
- FreeArgs(self.args)
- FreeVec(self.parsed)
- IF self.closeicon THEN CloseLibrary(iconbase)
- IF self.closeutil THEN CloseLibrary(utilitybase)
- ENDPROC
-
-
-
- PROC diskobject(template) OF obj_startup
- DEF return=ERROR_NONE,
- dobj=NIL:PTR TO diskobject,
- tooltypes:PTR TO LONG,
- string=NIL,
- x,len,pos
-
- IF (dobj:=GetDiskObject('PROGDIR:filofax')) ->!!!
- IF (tooltypes:=dobj.tooltypes)
- x:=0
- len:=0
- WHILE tooltypes[x]
- len:=len+StrLen(tooltypes[x])+1
- INC x
- ENDWHILE
- INC len
-
- IF (string:=AllocVec(len,NIL))=NIL
- return:=ERROR_NOMEM
- JUMP enddiskobject
- ENDIF
-
- x:=0
- pos:=0
- WHILE tooltypes[x]
- CopyMem(tooltypes[x],string+pos,StrLen(tooltypes[x]))
- pos:=pos+StrLen(tooltypes[x])
- PutChar(string+pos,",")
- INC pos
- INC x
- ENDWHILE
- DEC pos
- PutChar(string+pos,$0A)
- PutChar(string+pos+1,$00)
-
- IoErr()
- self.args:=ReadArgs(template,self.parsed,[string,len,0,NIL,NIL,NIL,NIL,NIL])
- IF (self.args=NIL) AND (IoErr()<>ERROR_TOO_MANY_ARGS)
- return:=STARTM_WRONGARGS
- JUMP enddiskobject
- ENDIF
-
- enddiskobject:
- FreeVec(string)
- ENDIF
- FreeDiskObject(dobj)
- ENDIF
- ENDPROC return
-
-